<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="pandoc">
  <meta name="author" content="滨州学院">
  <title>实用软件工程</title>
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
  <link rel="stylesheet" href="reveal.js/css/reset.css">
  <link rel="stylesheet" href="reveal.js/css/reveal.css">
  <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
  </style>
  <link rel="stylesheet" href="reveal.js/css/theme/white.css" id="theme">
  <!-- Printing and PDF exports -->
  <script>
    var link = document.createElement( 'link' );
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href = window.location.search.match( /print-pdf/gi ) ? 'reveal.js/css/print/pdf.css' : 'reveal.js/css/print/paper.css';
    document.getElementsByTagName( 'head' )[0].appendChild( link );
  </script>
  <!--[if lt IE 9]>
  <script src="reveal.js/lib/js/html5shiv.js"></script>
  <![endif]-->
</head>
<body>
  <div class="reveal">
    <div class="slides">

<section id="title-slide">
  <h1 class="title">实用软件工程</h1>
  <p class="subtitle">CH03 需求分析</p>
  <p class="author">滨州学院</p>
</section>

<section id="学习目标" class="slide level2">
<h2>学习目标</h2>
<ul>
<li>掌握：需求分析的任务、步骤和原则；需求分析的方法和工具。</li>
<li>熟悉：数据流图的基本成分、分层数据流图的概念和绘制方法。</li>
<li>了解：需求变更控制过程。</li>
</ul>
</section>
<section><section id="需求分析概述" class="title-slide slide level1"><h1>3.1 需求分析概述</h1></section><section id="需求分析的定义" class="slide level2">
<h2>1. 需求分析的定义</h2>
<dl>
<dt>需求分析</dt>
<dd>是指开发人员要准确地理解用户的要求，进行细致的调查分析，将用户非形式化的需求陈述转化为完整的需求定义，再由需求定义转化为相应的软件需求规格说明书的过程。
</dd>
</dl>
</section><section id="需求分析的重要性" class="slide level2">
<h2>2. 需求分析的重要性</h2>
<ul>
<li>软件开发的开始阶段</li>
<li>关系到整个项目的成败</li>
</ul>
</section><section id="需求分析的困难" class="slide level2">
<h2>3. 需求分析的困难</h2>
<ul>
<li>客户说不清需求</li>
<li>需求经常变动</li>
<li>问题复杂</li>
<li>交流障碍</li>
<li>开发人员写不好需求文档</li>
</ul>
</section></section>
<section><section id="需求分析的任务过程和主要步骤" class="title-slide slide level1"><h1>3.2 需求分析的任务、过程和主要步骤</h1></section><section id="需求分析的任务" class="slide level2">
<h2>1. 需求分析的任务</h2>
<ul>
<li>需求分析的任务是确定系统必须完成哪些工作，对目标系统提出完整、准确、清晰、具体的要求。</li>
<li>用户和软件人员一起充分理解用户的要求，并把双方共同的理解明确地写成需求规格说明书。</li>
<li>需求分析阶段的主要参与者：系统分析人员和用户方代表。</li>
</ul>
</section><section class="slide level2">

<ul>
<li><strong>用户要求</strong>是指软件系统必须具有的所有性质和限制。包括
<ul>
<li>功能要求、性能要求、可靠性要求、安全保密要求、出错处理要求</li>
<li>开发费用、开发周期、可使用的资源等方面的限制</li>
</ul></li>
</ul>
</section><section class="slide level2">

<ul>
<li><strong>需求规格说明书</strong>是用户要求的明确表达
<ul>
<li>为用户和软件开发人员的理解和交流提供了基础</li>
<li>反映出问题的结构，可以作为软件人员进行工作的参考</li>
<li>作为测试和验收的依据，即作为选取测试用例和进行形式验收的依据</li>
</ul></li>
</ul>
</section><section id="需求分析的工作过程" class="slide level2">
<h2>2. 需求分析的工作过程</h2>
<ul>
<li>1）<strong>需求获取</strong>：确定对目标系统的综合要求
<ul>
<li>功能需求，性能需求，环境需求，界面需求，软件成本与开发进度需求</li>
</ul></li>
<li>2）<strong>需求分析</strong>：逐步细化所有的软件功能，建立新系统的逻辑模型</li>
<li>3）<strong>编写文档</strong>：需求规格说明书，用户初步使用手册，确认测试计划，修改完善软件开发计划</li>
<li>4）<strong>需求评审</strong></li>
</ul>
</section><section id="需求分析的主要步骤" class="slide level2">
<h2>3. 需求分析的主要步骤</h2>
<ul>
<li>对当前系统进行详细调查，收集数据</li>
<li>建立当前系统的物理模型</li>
<li>建立当前系统的逻辑模型</li>
<li>对当前系统充分了解的基础上，提出改进意见和新系统应达到的目标</li>
<li>建立新系统的逻辑模型</li>
<li>编写系统分析说明书</li>
</ul>
</section><section id="需求分析的原则" class="slide level2">
<h2>4. 需求分析的原则</h2>
<ul>
<li>分析人员要使用符合客户习惯的语言</li>
<li>分析人员要了解用户的业务及目标</li>
<li>分析人员必须编写软件需求报告</li>
<li>分析人员要尊重客户的意见</li>
<li>分析人员对需求及产品实施提出建议和解决方案</li>
<li>尽量重用已有的软件组件</li>
<li>严格划分需求的优先级</li>
<li>认真细致地评审需求文档和原型</li>
<li>需求变更流程控制</li>
</ul>
</section></section>
<section><section id="需求调查的开展" class="title-slide slide level1"><h1>3.3 需求调查的开展</h1></section><section id="需求调查" class="slide level2">
<h2>需求调查</h2>
<ul>
<li>准备调查</li>
<li>调查与记录</li>
<li>分析需求信息</li>
<li>撰写《用户需求规格说明书》</li>
<li>确认需求</li>
</ul>
</section></section>
<section><section id="需求分析方法" class="title-slide slide level1"><h1>3.4 需求分析方法</h1></section><section id="功能分解方法" class="slide level2">
<h2>1. 功能分解方法</h2>
<ul>
<li>将一个系统看成由若干功能组成的一个集合，每个功能又可以划分成若干个子功能（加工），每个子功能又进一步分解成若干个子功能（加工步骤）</li>
</ul>
<blockquote>
<p>功能分解方法 = 功能 + 子功能 + 功能接口</p>
</blockquote>
</section><section id="结构化分析方法" class="slide level2">
<h2>2. 结构化分析方法</h2>
<ul>
<li>是一种从问题空间到某种表示的映射方法，软件功能由数据流图表示，由数据流图和数据字典构成系统的逻辑模型。</li>
</ul>
<blockquote>
<p>结构化方法 = 数据流 + 数据变换 + 数据存储 + 数据源点、终点 + 加工说明 + 数据字典</p>
</blockquote>
</section><section id="信息建模方法" class="slide level2">
<h2>3. 信息建模方法</h2>
<ul>
<li>是从数据的角度对现实世界建立模型，也看做是数据库模型。</li>
</ul>
<blockquote>
<p>信息建模 = 对象 + 属性 + 联系 + 关联对象</p>
</blockquote>
<ul>
<li>信息建模方法的基本工具是实体-关系图（ER图）。</li>
</ul>
</section><section id="原型化方法" class="slide level2">
<h2>4. 原型化方法</h2>
<ul>
<li>所谓原型是软件的一个早期可运行的版本，它实现了目标系统的部分或主要功能。</li>
<li>原型化方法就是用较小的代价尽可能快地构造一个粗糙的系统，这个系统实现了目标系统的部分或主要功能。</li>
<li>在原型的基础上听取用户的意见，准确把握用户的需求，并很有可能在逐步改进原型、增强原型功能的过程中最终开发出目标系统。</li>
</ul>
</section></section>
<section><section id="结构化分析方法及工具" class="title-slide slide level1"><h1>3.5 结构化分析方法及工具</h1></section><section id="section" class="slide level2">
<h2></h2>
<dl>
<dt>结构化分析方法</dt>
<dd>也称为数据流方法，它使用<strong>数据流图</strong>（DFD）、<strong>数据字典</strong>（DD）<strong>结构化语言</strong>、<strong>判定树</strong>和<strong>判定表</strong>等工具来建立一种称为<strong>结构化规格说明</strong>的目标文档。
</dd>
</dl>
</section><section id="自顶向下逐层分解" class="slide level2">
<h2>1. 自顶向下逐层分解</h2>
<ul>
<li>把大问题分割成若干个小问题，然后分别解决，这就是“分解”。</li>
<li>分解可以分层进行，再逐层添加细节。</li>
</ul>
</section><section id="数据流图" class="slide level2">
<h2>2. 数据流图</h2>
<dl>
<dt>数据流图</dt>
<dd>是结构化分析方法中用于表示系统逻辑模型的一种工具。
</dd>
<dd>它以直观的图形描述系统数据的流动和处理过程，刻画数据流从输入到输出的移动变换过程。
</dd>
</dl>
</section><section id="数据流图的基本成分" class="slide level2">
<h2>数据流图的基本成分</h2>
<ul>
<li><strong>信息源</strong>：数据的源点或终点</li>
<li><strong>加工</strong>：对数据的加工或处理</li>
<li><strong>数据存储</strong>：输入或输出文件</li>
<li><strong>数据流</strong>：数据的流动方向</li>
</ul>
</section><section id="画数据流图的指导原则" class="slide level2">
<h2>画数据流图的指导原则</h2>
<ul>
<li>由外向内</li>
<li>自顶向下、逐层分解</li>
</ul>
</section><section id="数据流图的画法" class="slide level2">
<h2>数据流图的画法</h2>
<ul>
<li>1）识别系统的输入和输出</li>
<li>2）绘制系统内部数据流</li>
<li>3）对复杂加工进行分解</li>
<li>4）检查、修改、完善</li>
</ul>
</section><section id="绘制数据流图的注意事项" class="slide level2">
<h2>绘制数据流图的注意事项</h2>
<ul>
<li>合理编号</li>
<li>子图与父图的平衡</li>
<li>分解的程度</li>
</ul>
</section><section id="数据字典" class="slide level2">
<h2>3. 数据字典</h2>
<dl>
<dt>数据字典</dt>
<dd>由数据流、文件和数据项的定义所组成的集合称为数据字典。
</dd>
<dd>有四类信息：数据流条目，文件条目，数据项条目，加工条目。
</dd>
</dl>
</section><section id="加工逻辑说明" class="slide level2">
<h2>4. 加工逻辑说明</h2>
<ul>
<li>精确地描述用户要求一个加工做什么，包括加工的
<ul>
<li>激发条件，加工逻辑，优先级，执行频率，出错处理等</li>
</ul></li>
<li>描述加工逻辑的工具
<ul>
<li>结构化语言</li>
<li>判定表</li>
<li>判定树</li>
</ul></li>
</ul>
</section></section>
<section id="面向对象分析方法" class="title-slide slide level1"><h1>3.6 面向对象分析方法</h1></section>
<section id="软件需求规格说明书" class="title-slide slide level1"><h1>3.7 软件需求规格说明书</h1></section>
<section id="需求变更" class="title-slide slide level1"><h1>3.8 需求变更</h1></section>
    </div>
  </div>

  <script src="reveal.js/js/reveal.js"></script>

  <script>

      // Full list of configuration options available at:
      // https://github.com/hakimel/reveal.js#configuration
      Reveal.initialize({
        // Push each slide change to the browser history
        history: true,

        // Optional reveal.js plugins
        dependencies: [
          { src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
          { src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
          { src: 'reveal.js/plugin/notes/notes.js', async: true }
        ]
      });
    </script>
    </body>
</html>
